package com.kingoe.mybatisdj.shard.interceptor;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 自定义分表注解，控制影响范围，可以自定义指定mapper类表示全类都分表，亦或是放在方法级别，表示当前方法有分表业务
 *
 * 分表策略分两类，第一类依赖表中某个字段值，第二类则不依赖
 * 分表策略1 不依赖字段 ：如果选择使用日期分表策略，只需要指定 表前缀名 和 对应的 日期分表策略类即可。
 * 分表策略2 指定表字段 ：需要指定按照表 某个字段进行策略命名。
 *
 * @author jinwu
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface TableShard {

    // 表前缀名
    String tableNamePrefix();

    //值
    String value() default "";

    //是否是字段名，如果是需要解析请求参数改字段名的值（默认否）
    boolean fieldFlag() default false;

    // 对应的分表策略类
    Class<? extends ITableShardStrategy> shardStrategy();

}
